Add ability to read/write cache availability and archived status in CSV.
authorrobertl <robertl>
Sun, 6 Jan 2008 23:16:13 +0000 (23:16 +0000)
committerrobertl <robertl>
Sun, 6 Jan 2008 23:16:13 +0000 (23:16 +0000)
csv_util.c
defs.h
gpx.c
kml.c
xcsv_tokens.gperf
xcsv_tokens.in
xmldoc/chapters/styles.xml

index 437b8d1723f5c338b5d75b9eb91908be9415a2df..14c1e5040cf57f9404965e19e669fb5218a1dca6 100644 (file)
@@ -66,6 +66,8 @@ typedef enum {
        XT_GEOCACHE_PLACER,
        XT_GEOCACHE_TERR,
        XT_GEOCACHE_TYPE,
+       XT_GEOCACHE_ISAVAILABLE,
+       XT_GEOCACHE_ISARCHIVED,
        XT_GMT_TIME,
        XT_GPS_FIX,
        XT_GPS_HDOP,
@@ -1060,7 +1062,23 @@ xcsv_parse_val(const char *s, waypoint *wpt, const field_map_t *fmp)
     case XT_GEOCACHE_PLACER:
        wpt->gc_data.placer = csv_stringtrim(s, "", 0);
        break;
-       
+    case XT_GEOCACHE_ISAVAILABLE:
+       if ( case_ignore_strcmp(csv_stringtrim(s, "", 0), "False") == 0 )
+               wpt->gc_data.is_available = status_false;
+       else if ( case_ignore_strcmp(csv_stringtrim(s, "", 0), "True") == 0 )
+               wpt->gc_data.is_available = status_true;
+       else
+               wpt->gc_data.is_available = status_unknown;
+       break;
+    case XT_GEOCACHE_ISARCHIVED:
+       if ( case_ignore_strcmp(csv_stringtrim(s, "", 0), "False") == 0 )
+               wpt->gc_data.is_archived = status_false;
+       else if ( case_ignore_strcmp(csv_stringtrim(s, "", 0), "True") == 0 )
+               wpt->gc_data.is_archived = status_true;        
+       else
+       wpt->gc_data.is_archived = status_unknown;
+       break;
+               
     /* GPS STUFF *******************************************************/
     case XT_GPS_HDOP:
        wpt->hdop = atof(s);
@@ -1620,6 +1638,22 @@ xcsv_waypt_pr(const waypoint *wpt)
            writebuff(buff, fmp->printfc, NONULL(wpt->gc_data.placer));
            field_is_unknown = !wpt->gc_data.placer;
             break;
+       case XT_GEOCACHE_ISAVAILABLE:
+           if ( wpt->gc_data.is_available == status_false )
+             writebuff(buff, fmp->printfc, "False");
+           else if ( wpt->gc_data.is_available == status_true )
+             writebuff(buff, fmp->printfc, "True");
+                       else
+                               writebuff(buff, fmp->printfc, "Unknown");
+            break;
+       case XT_GEOCACHE_ISARCHIVED:
+           if ( wpt->gc_data.is_archived == status_false )
+             writebuff(buff, fmp->printfc, "False");
+           else if ( wpt->gc_data.is_archived == status_true )
+               writebuff(buff, fmp->printfc, "True");
+           else
+               writebuff(buff, fmp->printfc, "Unknown");
+            break;
        /* Tracks and Routes ***********************************************/
        case XT_TRACK_NAME:
            if (csv_track) writebuff(buff, fmp->printfc, NONULL(csv_track->rte_name));
diff --git a/defs.h b/defs.h
index 49850aa738663a178be4592fe19d719f766f3781..3ea48c5ed4091eb32aab65e9c30ebc586fdffb28 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -138,6 +138,12 @@ typedef enum {
        fix_pps
 } fix_type;
 
+typedef enum {
+       status_unknown=0,
+       status_true,
+       status_false
+} status_type;
+        
 /*
  * Define globally on which kind of data gpsbabel is working.
  * Important for "file types" that are essentially a communication
@@ -234,15 +240,15 @@ typedef struct {
        geocache_container container:4;
        unsigned int diff:6; /* (multiplied by ten internally) */
        unsigned int terr:6; /* (likewise) */
-       unsigned int is_archived:1;
-       unsigned int is_available:1;
+       status_type is_archived:2;
+       status_type is_available:2;
        time_t exported;
        time_t last_found;
        char *placer; /* Placer name */
        int placer_id; /* Placer id */
        char *hint; /* all these UTF8, XML entities removed, May be not HTML. */
        utf_string desc_short;
-       utf_string desc_long; 
+       utf_string desc_long;
 } geocache_data ;
 
 typedef struct xml_tag {
diff --git a/gpx.c b/gpx.c
index a02dddb22a4ab578525aa4fe4cedba9758f4f73a..7e33d28714b52b9d3036070373e30927b838f5c3 100644 (file)
--- a/gpx.c
+++ b/gpx.c
@@ -486,13 +486,19 @@ tag_gs_cache(const char **attrv)
                if (strcmp(avp[0], "id") == 0) {
                                wpt_tmp->gc_data.id = atoi(avp[1]);
                } else if (strcmp(avp[0], "available") == 0) {
-                       if (strcmp(avp[1], "True") == 0) {
-                               wpt_tmp->gc_data.is_available = 1;
+                       if (case_ignore_strcmp(avp[1], "True") == 0) {
+                               wpt_tmp->gc_data.is_available = status_true;
                        }
+                       else if (case_ignore_strcmp(avp[1], "False") == 0) {
+                               wpt_tmp->gc_data.is_available = status_false;
+                       }                       
                } else if (strcmp(avp[0], "archived") == 0) {
-                       if (strcmp(avp[1], "True") == 0) {
-                               wpt_tmp->gc_data.is_archived = 1;
+                       if (case_ignore_strcmp(avp[1], "True") == 0) {
+                               wpt_tmp->gc_data.is_archived = status_true;
                        }
+                       else if (case_ignore_strcmp(avp[1], "False") == 0) {
+                               wpt_tmp->gc_data.is_archived = status_false;
+                       }                       
                }
        }
 }
diff --git a/kml.c b/kml.c
index aa8a79004ed0593fa48c575edcd434ef8d178cb0..5ac81d8f0a394b54fa7f50cee9d919c6b00a7738 100644 (file)
--- a/kml.c
+++ b/kml.c
@@ -820,9 +820,9 @@ static void kml_geocache_pr(const waypoint *waypointp)
         // Highlight any issues with the cache, such as temp unavail 
         // or archived.
        kml_write_xml(0, "<Data name=\"gc_issues\"><value>");
-       if (waypointp->gc_data.is_archived == 1) {
+       if (waypointp->gc_data.is_archived == status_true) {
                kml_write_xml(0, "&lt;font color=\"red\"&gt;This cache has been archived.&lt;/font&gt;<br/>\n");
-       } else if (waypointp->gc_data.is_available == 0) {
+       } else if (waypointp->gc_data.is_available == status_false) {
                kml_write_xml(0, "&lt;font color=\"red\"&gt;This cache is temporarily unavailable.&lt;/font&gt;<br/>\n");
        }
        kml_write_xml(0, "</value></Data>\n");
index 3d5953fb5e4d60d34fa1ebb2217bafbb31c396a0..e0df1bec901d7a81be10522315a1a3e1a0bc3031 100644 (file)
@@ -1,5 +1,5 @@
-/* C code produced by gperf version 3.0.2 */
-/* Command-line: gperf -t --output-file=xcsv_tokens.gperf xcsv_tokens.in  */
+/* ANSI-C code produced by gperf version 3.0.1 */
+/* Command-line: gperf -L ANSI-C -D -t xcsv_tokens.in  */
 /* Computed positions: -k'2,4-5,12' */
 
 #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
       && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
       && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
 /* The character set is not based on ISO-646.  */
-error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
+#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
 #endif
 
 #line 1 "xcsv_tokens.in"
 struct xt_mapping {char *name; int xt_token; };
 
-#define TOTAL_KEYWORDS 60
+#define TOTAL_KEYWORDS 62
 #define MIN_WORD_LENGTH 3
 #define MAX_WORD_LENGTH 21
-#define MIN_HASH_VALUE 7
-#define MAX_HASH_VALUE 148
-/* maximum key range = 142, duplicates = 0 */
+#define MIN_HASH_VALUE 10
+#define MAX_HASH_VALUE 113
+/* maximum key range = 104, duplicates = 0 */
 
 #ifdef __GNUC__
 __inline
@@ -47,38 +47,36 @@ inline
 #endif
 #endif
 static unsigned int
-hash (str, len)
-     register const char *str;
-     register unsigned int len;
+hash (register const char *str, register unsigned int len)
 {
   static unsigned char asso_values[] =
     {
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149,   0, 149,   0,   0,   5,
-       50,  20,  10,  35, 149,  20,  30,  50,   0,   5,
-       60, 149,  45,  55,   5, 149,   5, 149,   5,   5,
-      149, 149, 149, 149, 149,  20, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
-      149, 149, 149, 149, 149, 149
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114,  25, 114,   0,   0,   0,
+       50,  15,   5,  10, 114,  50,  25,  45,   5,   0,
+       40, 114,  20,   5,   5, 114,  30, 114,  10,   5,
+      114, 114, 114, 114, 114,  15, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+      114, 114, 114, 114, 114, 114
     };
   register int hval = len;
 
@@ -111,164 +109,147 @@ hash (str, len)
 __inline
 #endif
 struct xt_mapping *
-in_word_set (str, len)
-     register const char *str;
-     register unsigned int len;
+in_word_set (register const char *str, register unsigned int len)
 {
   static struct xt_mapping wordlist[] =
     {
-      {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 5 "xcsv_tokens.in"
-      {"ANYNAME", XT_ANYNAME},
-      {""}, {""}, {""}, {""},
+#line 50 "xcsv_tokens.in"
+      {"NOTES", XT_NOTES},
+#line 58 "xcsv_tokens.in"
+      {"ROUTE_NAME", XT_ROUTE_NAME},
+#line 7 "xcsv_tokens.in"
+      {"CONSTANT", XT_CONSTANT},
+#line 30 "xcsv_tokens.in"
+      {"INDEX", XT_INDEX},
+#line 44 "xcsv_tokens.in"
+      {"LON_DIR", XT_LON_DIR},
+#line 62 "xcsv_tokens.in"
+      {"URL", XT_URL},
+#line 60 "xcsv_tokens.in"
+      {"TIMET_TIME", XT_TIMET_TIME},
+#line 42 "xcsv_tokens.in"
+      {"LON_DECIMAL", XT_LON_DECIMAL},
+#line 48 "xcsv_tokens.in"
+      {"LON_NMEA", XT_LON_NMEA},
+#line 43 "xcsv_tokens.in"
+      {"LON_DECIMALDIR", XT_LON_DECIMALDIR},
+#line 28 "xcsv_tokens.in"
+      {"ICON_DESCR", XT_ICON_DESCR},
+#line 8 "xcsv_tokens.in"
+      {"DESCRIPTION", XT_DESCRIPTION},
+#line 31 "xcsv_tokens.in"
+      {"ISO_TIME", XT_ISO_TIME},
+#line 25 "xcsv_tokens.in"
+      {"HEART_RATE", XT_HEART_RATE},
+#line 32 "xcsv_tokens.in"
+      {"ISO_TIME_MS", XT_ISO_TIME_MS},
 #line 6 "xcsv_tokens.in"
       {"CADENCE", XT_CADENCE},
-      {""}, {""},
-#line 28 "xcsv_tokens.in"
-      {"INDEX", XT_INDEX},
-      {""}, {""},
+#line 46 "xcsv_tokens.in"
+      {"LON_HUMAN_READABLE", XT_LON_HUMAN_READABLE},
+#line 59 "xcsv_tokens.in"
+      {"SHORTNAME", XT_SHORTNAME},
+#line 29 "xcsv_tokens.in"
+      {"IGNORE", XT_IGNORE},
+#line 5 "xcsv_tokens.in"
+      {"ANYNAME", XT_ANYNAME},
 #line 12 "xcsv_tokens.in"
       {"GEOCACHE_HINT", XT_GEOCACHE_HINT},
-      {""},
-#line 14 "xcsv_tokens.in"
-      {"GEOCACHE_PLACER", XT_GEOCACHE_PLACER},
-      {""}, {""},
+#line 9 "xcsv_tokens.in"
+      {"EXCEL_TIME", XT_EXCEL_TIME},
+#line 36 "xcsv_tokens.in"
+      {"LAT_DIR", XT_LAT_DIR},
 #line 10 "xcsv_tokens.in"
       {"GEOCACHE_CONTAINER", XT_GEOCACHE_CONTAINER},
-      {""},
-#line 56 "xcsv_tokens.in"
-      {"ROUTE_NAME", XT_ROUTE_NAME},
-      {""},
+#line 13 "xcsv_tokens.in"
+      {"GEOCACHE_LAST_FOUND", XT_GEOCACHE_LAST_FOUND},
+#line 49 "xcsv_tokens.in"
+      {"MAP_EN_BNG", XT_MAP_EN_BNG},
 #line 34 "xcsv_tokens.in"
-      {"LAT_DIR", XT_LAT_DIR},
-#line 38 "xcsv_tokens.in"
-      {"LAT_NMEA", XT_LAT_NMEA},
-      {""},
-#line 26 "xcsv_tokens.in"
-      {"ICON_DESCR", XT_ICON_DESCR},
-#line 32 "xcsv_tokens.in"
       {"LAT_DECIMAL", XT_LAT_DECIMAL},
-#line 42 "xcsv_tokens.in"
-      {"LON_DIR", XT_LON_DIR},
-#line 46 "xcsv_tokens.in"
-      {"LON_NMEA", XT_LON_NMEA},
-#line 33 "xcsv_tokens.in"
-      {"LAT_DECIMALDIR", XT_LAT_DECIMALDIR},
 #line 47 "xcsv_tokens.in"
-      {"MAP_EN_BNG", XT_MAP_EN_BNG},
+      {"LON_INT32DEG", XT_LON_INT32DEG},
 #line 40 "xcsv_tokens.in"
-      {"LON_DECIMAL", XT_LON_DECIMAL},
-      {""}, {""},
-#line 41 "xcsv_tokens.in"
-      {"LON_DECIMALDIR", XT_LON_DECIMALDIR},
-#line 52 "xcsv_tokens.in"
+      {"LAT_NMEA", XT_LAT_NMEA},
+#line 35 "xcsv_tokens.in"
+      {"LAT_DECIMALDIR", XT_LAT_DECIMALDIR},
+#line 54 "xcsv_tokens.in"
       {"PATH_SPEED", XT_PATH_SPEED},
-#line 49 "xcsv_tokens.in"
+#line 51 "xcsv_tokens.in"
       {"PATH_COURSE", XT_PATH_COURSE},
-      {""}, {""}, {""},
-#line 39 "xcsv_tokens.in"
+#line 15 "xcsv_tokens.in"
+      {"GEOCACHE_TERR", XT_GEOCACHE_TERR},
+#line 41 "xcsv_tokens.in"
       {"LOCAL_TIME", XT_LOCAL_TIME},
-#line 50 "xcsv_tokens.in"
+#line 52 "xcsv_tokens.in"
       {"PATH_DISTANCE_KM", XT_PATH_DISTANCE_KM},
-      {""},
-#line 60 "xcsv_tokens.in"
-      {"URL", XT_URL},
-#line 51 "xcsv_tokens.in"
-      {"PATH_DISTANCE_MILES", XT_PATH_DISTANCE_MILES},
-#line 9 "xcsv_tokens.in"
-      {"EXCEL_TIME", XT_EXCEL_TIME},
-      {""}, {""},
-#line 36 "xcsv_tokens.in"
+#line 38 "xcsv_tokens.in"
       {"LAT_HUMAN_READABLE", XT_LAT_HUMAN_READABLE},
-      {""},
-#line 58 "xcsv_tokens.in"
-      {"TIMET_TIME", XT_TIMET_TIME},
-#line 31 "xcsv_tokens.in"
-      {"LATLON_HUMAN_READABLE", XT_LATLON_HUMAN_READABLE},
-      {""},
-#line 44 "xcsv_tokens.in"
-      {"LON_HUMAN_READABLE", XT_LON_HUMAN_READABLE},
-      {""}, {""},
-#line 8 "xcsv_tokens.in"
-      {"DESCRIPTION", XT_DESCRIPTION},
-      {""},
-#line 15 "xcsv_tokens.in"
-      {"GEOCACHE_TERR", XT_GEOCACHE_TERR},
-#line 54 "xcsv_tokens.in"
-      {"PATH_SPEED_KPH", XT_PATH_SPEED_KPH},
-#line 23 "xcsv_tokens.in"
-      {"HEART_RATE", XT_HEART_RATE},
 #line 53 "xcsv_tokens.in"
-      {"PATH_SPEED_KNOTS", XT_PATH_SPEED_KNOTS},
-      {""},
-#line 11 "xcsv_tokens.in"
-      {"GEOCACHE_DIFF", XT_GEOCACHE_DIFF},
-#line 57 "xcsv_tokens.in"
-      {"SHORTNAME", XT_SHORTNAME},
-#line 48 "xcsv_tokens.in"
-      {"NOTES", XT_NOTES},
-      {""}, {""},
-#line 7 "xcsv_tokens.in"
-      {"CONSTANT", XT_CONSTANT},
-      {""},
-#line 59 "xcsv_tokens.in"
-      {"TRACK_NAME", XT_TRACK_NAME},
-#line 27 "xcsv_tokens.in"
-      {"IGNORE", XT_IGNORE},
-      {""},
-#line 16 "xcsv_tokens.in"
-      {"GEOCACHE_TYPE", XT_GEOCACHE_TYPE},
-#line 13 "xcsv_tokens.in"
-      {"GEOCACHE_LAST_FOUND", XT_GEOCACHE_LAST_FOUND},
-      {""}, {""}, {""},
+      {"PATH_DISTANCE_MILES", XT_PATH_DISTANCE_MILES},
+#line 14 "xcsv_tokens.in"
+      {"GEOCACHE_PLACER", XT_GEOCACHE_PLACER},
+#line 23 "xcsv_tokens.in"
+      {"GPS_SAT", XT_GPS_SAT},
+#line 21 "xcsv_tokens.in"
+      {"GPS_HDOP", XT_GPS_HDOP},
+#line 18 "xcsv_tokens.in"
+      {"GEOCACHE_ISARCHIVED", XT_GEOCACHE_ISARCHIVED},
 #line 17 "xcsv_tokens.in"
+      {"GEOCACHE_ISAVAILABLE", XT_GEOCACHE_ISAVAILABLE},
+#line 19 "xcsv_tokens.in"
       {"GMT_TIME", XT_GMT_TIME},
-#line 35 "xcsv_tokens.in"
-      {"LAT_DIRDECIMAL", XT_LAT_DIRDECIMAL},
-      {""}, {""},
-#line 37 "xcsv_tokens.in"
-      {"LAT_INT32DEG", XT_LAT_INT32DEG},
-#line 29 "xcsv_tokens.in"
-      {"ISO_TIME", XT_ISO_TIME},
-#line 43 "xcsv_tokens.in"
-      {"LON_DIRDECIMAL", XT_LON_DIRDECIMAL},
-      {""},
-#line 30 "xcsv_tokens.in"
-      {"ISO_TIME_MS", XT_ISO_TIME_MS},
 #line 45 "xcsv_tokens.in"
-      {"LON_INT32DEG", XT_LON_INT32DEG},
-#line 22 "xcsv_tokens.in"
-      {"GPS_VDOP", XT_GPS_VDOP},
-#line 55 "xcsv_tokens.in"
-      {"PATH_SPEED_MPH", XT_PATH_SPEED_MPH},
-      {""}, {""}, {""},
-#line 19 "xcsv_tokens.in"
-      {"GPS_HDOP", XT_GPS_HDOP},
-#line 24 "xcsv_tokens.in"
+      {"LON_DIRDECIMAL", XT_LON_DIRDECIMAL},
+#line 33 "xcsv_tokens.in"
+      {"LATLON_HUMAN_READABLE", XT_LATLON_HUMAN_READABLE},
+#line 39 "xcsv_tokens.in"
+      {"LAT_INT32DEG", XT_LAT_INT32DEG},
+#line 16 "xcsv_tokens.in"
+      {"GEOCACHE_TYPE", XT_GEOCACHE_TYPE},
+#line 61 "xcsv_tokens.in"
+      {"TRACK_NAME", XT_TRACK_NAME},
+#line 63 "xcsv_tokens.in"
+      {"URL_LINK_TEXT", XT_URL_LINK_TEXT},
+#line 26 "xcsv_tokens.in"
       {"HMSG_TIME", XT_HMSG_TIME},
-      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 3 "xcsv_tokens.in"
-      {"ALT_FEET", XT_ALT_FEET},
-#line 25 "xcsv_tokens.in"
+#line 11 "xcsv_tokens.in"
+      {"GEOCACHE_DIFF", XT_GEOCACHE_DIFF},
+#line 24 "xcsv_tokens.in"
+      {"GPS_VDOP", XT_GPS_VDOP},
+#line 27 "xcsv_tokens.in"
       {"HMSL_TIME", XT_HMSL_TIME},
 #line 4 "xcsv_tokens.in"
       {"ALT_METERS", XT_ALT_METERS},
-      {""}, {""},
-#line 61 "xcsv_tokens.in"
-      {"URL_LINK_TEXT", XT_URL_LINK_TEXT},
-      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-#line 62 "xcsv_tokens.in"
-      {"YYYYMMDD_TIME", XT_YYYYMMDD_TIME},
-      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
-      {""}, {""}, {""}, {""},
-#line 18 "xcsv_tokens.in"
-      {"GPS_FIX", XT_GPS_FIX},
-      {""}, {""}, {""}, {""},
-#line 21 "xcsv_tokens.in"
-      {"GPS_SAT", XT_GPS_SAT},
-      {""}, {""}, {""}, {""}, {""},
+#line 3 "xcsv_tokens.in"
+      {"ALT_FEET", XT_ALT_FEET},
+#line 37 "xcsv_tokens.in"
+      {"LAT_DIRDECIMAL", XT_LAT_DIRDECIMAL},
+#line 22 "xcsv_tokens.in"
+      {"GPS_PDOP", XT_GPS_PDOP},
+#line 57 "xcsv_tokens.in"
+      {"PATH_SPEED_MPH", XT_PATH_SPEED_MPH},
+#line 56 "xcsv_tokens.in"
+      {"PATH_SPEED_KPH", XT_PATH_SPEED_KPH},
+#line 55 "xcsv_tokens.in"
+      {"PATH_SPEED_KNOTS", XT_PATH_SPEED_KNOTS},
 #line 20 "xcsv_tokens.in"
-      {"GPS_PDOP", XT_GPS_PDOP}
+      {"GPS_FIX", XT_GPS_FIX},
+#line 64 "xcsv_tokens.in"
+      {"YYYYMMDD_TIME", XT_YYYYMMDD_TIME}
+    };
+
+  static signed char lookup[] =
+    {
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  0, -1, -1, -1,
+      -1,  1, -1, -1,  2, -1,  3, -1,  4,  5, -1,  6,  7, -1,
+       8,  9, 10, 11, -1, 12, -1, 13, 14, 15, 16, 17, -1, 18,
+      19, 20, -1, 21, -1, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+      31, -1, 32, -1, 33, 34, -1, 35, 36, 37, -1, 38, 39, 40,
+      41, -1, -1, 42, 43, -1, 44, 45, 46, -1, 47, -1, -1, 48,
+      49, -1, -1, -1, 50, -1, -1, -1, -1, 51, 52, 53, -1, -1,
+      54, 55, -1, -1, -1, 56, 57, -1, -1, -1, -1, 58, -1, 59,
+      60, 61
     };
 
   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
@@ -277,10 +258,15 @@ in_word_set (str, len)
 
       if (key <= MAX_HASH_VALUE && key >= 0)
         {
-          register const char *s = wordlist[key].name;
+          register int index = lookup[key];
+
+          if (index >= 0)
+            {
+              register const char *s = wordlist[index].name;
 
-          if (*str == *s && !strcmp (str + 1, s + 1))
-            return &wordlist[key];
+              if (*str == *s && !strcmp (str + 1, s + 1))
+                return &wordlist[index];
+            }
         }
     }
   return 0;
index dc98a1692b8e08988acc1ba2bd1ce29116848891..a80c1f253331a07f53baeb2d0e13079d5a0b124e 100644 (file)
@@ -14,6 +14,8 @@ GEOCACHE_LAST_FOUND, XT_GEOCACHE_LAST_FOUND
 GEOCACHE_PLACER, XT_GEOCACHE_PLACER
 GEOCACHE_TERR, XT_GEOCACHE_TERR
 GEOCACHE_TYPE, XT_GEOCACHE_TYPE
+GEOCACHE_ISAVAILABLE, XT_GEOCACHE_ISAVAILABLE
+GEOCACHE_ISARCHIVED, XT_GEOCACHE_ISARCHIVED
 GMT_TIME, XT_GMT_TIME
 GPS_FIX, XT_GPS_FIX
 GPS_HDOP, XT_GPS_HDOP
index 164a5f01f90c8db46af5a152bcb46987f21577b2..123786bc205342d7e01416225deb9790fd9caa81 100644 (file)
@@ -986,6 +986,32 @@ example:
 </screen>
 </section>
 
+<section id="style_def_isavailable">
+<title>GEOCACHE_ISAVAILABLE</title>
+<para>
+   GEOCACHE_ISAVAILABLE is a string containing "True" or "False" 
+   indicating whether a geocache is currently available or not.  
+</para>
+<para>
+example:
+</para>
+<screen format="linespecific">   GEOCACHE_ISAVAILABLE,"","%s"
+</screen>
+</section>
+
+<section id="style_def_isarchived">
+<title>GEOCACHE_ISARCHIVED</title>
+<para>
+   GEOCACHE_ISARCHIVED is a string containing "True" or "False" 
+   indicating whether a geocache has been archived.   
+</para>
+<para>
+example:
+</para>
+<screen format="linespecific">   GEOCACHE_ISARCHIVED,"","%s"
+</screen>
+</section>
+
 <section id="style_def_geofound">
 <title>GEOCACHE_LAST_FOUND</title>
 <para>